package Yunzai

import (
	"fmt"
	"gopkg.in/yaml.v2"
	"os"
	"time"
	"bufio"
	"strconv"
	"github.com/olekukonko/tablewriter"
)

func YunZaiBot_master_add(GoBoxPath, BotPath string) {
	os.Chdir(GoBoxPath)
	configPath := BotPath + "/config/config/other.yaml"

	// 判断配置文件是否存在
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		fmt.Println(Red, "配置文件不存在，请完成初始化...", Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 读取配置文件
	data, err := readFile(configPath)
	if err != nil {
		fmt.Println(Red, "读取配置文件失败：", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 解析配置文件
	var adminConfig Admin
	err = yaml.Unmarshal(data, &adminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 输入主人QQ
	var qadmin int64
	fmt.Printf("请输入主人QQ:")
	_, err = fmt.Scanln(&qadmin)
	if err != nil || qadmin < 1000000 {
		fmt.Println(Red, "主人QQ输入错误...", Reset)
		time.Sleep(2 * time.Second)
		reader := bufio.NewReader(os.Stdin)
		// 清除缓存区中的回车符
		_, _ = reader.ReadBytes('\n')
		return
	}

	// 检查主人QQ是否已存在
	for _, qq := range adminConfig.MasterQQ {
		if qq == qadmin {
			fmt.Println(Red, "主人QQ已存在", Reset)
			time.Sleep(2 * time.Second)
			return
		}
	}

	// 添加主人QQ
	adminConfig.MasterQQ = append(adminConfig.MasterQQ, qadmin)

	// 保存配置文件
	data, err = yaml.Marshal(&adminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	modifiedYAMLData := addSpaceBeforeHyphen(string(data))
	err = writeFile(configPath, modifiedYAMLData)
	if err != nil {
		fmt.Println(Red, "保存配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	fmt.Println(Green, "主人QQ添加成功", Reset)
	time.Sleep(2 * time.Second)
	return
}

func YunZaiBot_master_del(GoBoxPath, BotPath string) {
	os.Chdir(GoBoxPath)
	configPath := BotPath + "/config/config/other.yaml"

	// 判断配置文件是否存在
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		fmt.Println(Red, "配置文件不存在，请完成初始化...", Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 读取配置文件
	data, err := readFile(configPath)
	if err != nil {
		fmt.Println(Red, "读取配置文件失败：", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 解析配置文件
	var adminConfig Admin
	err = yaml.Unmarshal(data, &adminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 输入要删除的主人 QQ 号码
	var qadmin int64
	fmt.Printf("请输入要删除的主人 QQ 号码:")
	_, err = fmt.Scanln(&qadmin)
	if err != nil || qadmin < 1000000 {
		fmt.Println(Red, "主人 QQ 号码输入错误...", Reset)
		time.Sleep(2 * time.Second)
		reader := bufio.NewReader(os.Stdin)
		// 清除缓存区中的回车符
		_, _ = reader.ReadBytes('\n')
		return
	}

	// 检查主人 QQ 是否存在于主人 QQ 列表中
	var found bool
	for i, qq := range adminConfig.MasterQQ {
		if qq == qadmin {
			// 删除主人 QQ
			adminConfig.MasterQQ = append(adminConfig.MasterQQ[:i], adminConfig.MasterQQ[i+1:]...)
			found = true
			break
		}
	}

	if !found {
		fmt.Println(Red, "主人 QQ 不存在", Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 保存配置文件
	data, err = yaml.Marshal(&adminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	modifiedYAMLData := addSpaceBeforeHyphen(string(data))
	err = writeFile(configPath, modifiedYAMLData)
	if err != nil {
		fmt.Println(Red, "保存配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	fmt.Println(Green, "主人 QQ 删除成功", Reset)
	time.Sleep(2 * time.Second)
	return
}
func YunZaiBot_master_list(GoBoxPath, BotPath string) {
	os.Chdir(GoBoxPath)
	configPath := BotPath + "/config/config/other.yaml"

	// 判断配置文件是否存在
	if _, err := os.Stat(configPath); os.IsNotExist(err) {
		fmt.Println(Red, "配置文件不存在，请完成初始化...", Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 读取配置文件
	data, err := readFile(configPath)
	if err != nil {
		fmt.Println(Red, "读取配置文件失败：", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 解析配置文件
	var adminConfig Admin
	err = yaml.Unmarshal(data, &adminConfig)
	if err != nil {
		fmt.Println(Red, "解析配置文件失败", err, Reset)
		time.Sleep(2 * time.Second)
		return
	}

	// 生成表格
	table := tablewriter.NewWriter(os.Stdout)
	table.SetHeader([]string{"ID", "主人 QQ"})
	for i, qq := range adminConfig.MasterQQ {
		table.Append([]string{strconv.Itoa(i + 1), strconv.FormatInt(qq, 10)})
	}
	//表格靠右边一点点


	table.SetColMinWidth(0, 10)
	table.SetColMinWidth(1, 32)
	//居中
	table.SetAlignment(tablewriter.ALIGN_CENTER)
	// table.SetTablePadding("   ")
	// table.SetTablePadding("   ")
	table.Render()
	fmt.Printf("按回车键返回主菜单...")
	fmt.Scanln()
	return
}